package controladores;

import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

import modelos.datos.TipoEvento;
import modelos.datos.seccion;
import modelos.datos.silla;
import modelo.hibernate.dao.DaoSeccion;
import modelo.hibernate.dao.DaoSilla;
import modelo.hibernate.dao.DaoTipoEvento;

import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.MouseEvent;
import org.zkoss.zk.ui.select.SelectorComposer;
import org.zkoss.zk.ui.select.annotation.Listen;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zul.Button;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Intbox;
import org.zkoss.zul.Longbox;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Listitem;

public class ControladorRegistrarSeccion extends SelectorComposer<Component> {

	private static final long serialVersionUID = 1L;
	private DaoSeccion dao = new DaoSeccion();
	private seccion seccion= new seccion();
	private DaoTipoEvento daoTipo=new DaoTipoEvento();
	private DaoSilla daoSilla= new DaoSilla();
	
	private List<TipoEvento> tipos=new ArrayList<>();
	private List<seccion> Lsecciones = new ArrayList<>();
	private List<silla> listSillas = new ArrayList<>();
	
	
	
	@Wire
	private Textbox codigo;
	@Wire
	private Textbox nombre;
	@Wire
	private Intbox capacidad;
	@Wire
	private Longbox precio;
	@Wire
	private Intbox cuposdisponibles;
	@Wire
	private Button btnRegistrar;
	@Wire
	private Button btnModificar;
	@Wire
	private Button btnEliminar;
	@Wire
	private Button btnBuscar;
	@Wire
	private Button btnCancelar;
	@Wire
    private Combobox cmbTipos;
	
	
	 public ControladorRegistrarSeccion() {
		super();
		// TODO Auto-generated constructor stub
		try {
			Lsecciones=dao.obtenerTodos();
			listSillas= daoSilla.obtenerTodos();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public List<TipoEvento> getTiposevento(){
		List<TipoEvento> tipoevento= new ArrayList<>();
		for(int i=0; i<tipos.size(); i++){
			tipoevento.add(tipos.get(i));
		}
		return tipoevento;
	}
	
	

	@Listen("onClick=#btnRegistrar")
		public void onClick$btnRegistrar(MouseEvent event){
		                int cant = Lsecciones.size()+1;
		                String cod="";
		                System.out.println("cant d secciones: "+ cant);
						if(Lsecciones.size()<10){
		                	 cod=("S000"+cant);
		                 }else if(Lsecciones.size()<100){
		                	 cod=("S00"+cant);
		                 }else
		                	 cod=("S0"+cant);
						
		                 seccion.setCodSeccion(cod);
		                 seccion.setNombre(nombre.getValue());
		                 seccion.setCapacidad(capacidad.getValue());
		                 seccion.setPrecio(precio.getValue());
                         seccion.setCuposDisponibles(cuposdisponibles.getValue());
                         
                         int nroSillas = listSillas.size()+1;
                         System.out.println("cantidad sillas: "+nroSillas);
                         String codSilla= "";
                         for (int i=0; i<capacidad.getValue();i++)
                         {
                        	 if(listSillas.size()<10){
    		                	 codSilla=("SI00"+nroSillas);
    		                 }else if(listSillas.size()<100){
    		                	 codSilla=("SI0"+nroSillas);
    		                 }else
    		                	 codSilla=("SI"+nroSillas);
                        	 
                        	 silla objSilla =new silla();
                        	 objSilla.setCodSilla(codSilla);
                        	 objSilla.setSeccion(seccion);
                        	 try{
                        		 
                        		 daoSilla.agregarSilla(objSilla);
                        		 nroSillas++;
                        	 }catch(Exception e )
                        	 {
                        		 e.printStackTrace();
                        	 }
                         
                         }
                         
						try {	
								dao.agregarSeccion(seccion);
								Messagebox.show("Se ha registrado La Seccion exitosamente", 
										"Information", Messagebox.OK, Messagebox.INFORMATION);
								
							
						} catch (Exception e) {
							// TODO Auto-generated catch block
							e.printStackTrace();	
						}
						LimpiarCampos();
			}
		


	@Listen("onClick=#btnCancelar")
	   	public void onClick$btnCancelar(MouseEvent event){
	    	Executions.sendRedirect("index.zul");
	    }
	    
	    public void LimpiarCampos()
	    {
	    	
	    	nombre.setText("");
	    	cuposdisponibles.setText("");
	    	capacidad.setText("");
	    	precio.setText("");
	    }

	    
	    @Listen("onClick=#btnBuscar")
		public void onClick$btnBuscar(MouseEvent event){
		 
		 try {	
			 String Nombre= nombre.getValue();
			 int posi= this.buscarSeccion(Nombre);
		

			 if(dao.obtenerTodos().get(posi).getNombre() == Nombre || posi!=-1)
			 { //Si encontro la seccion
			 				
			 				//codigo.setValue(dao.obtenerTodos().get(posi).getCodSeccion());
			 				nombre.setValue(dao.obtenerTodos().get(posi).getNombre());
			 				capacidad.setValue(dao.obtenerTodos().get(posi).getCapacidad()); 
			 				precio.setValue(dao.obtenerTodos().get(posi).getPrecio());
			 				cuposdisponibles.setValue(dao.obtenerTodos().get(posi).getCuposDisponibles());
			                 
			} 
		 					}catch (Exception e) {
		 						
		 						Messagebox.show("Esta seccion no existe en la base de datos", "Error", Messagebox.OK, Messagebox.ERROR);
								// TODO Auto-generated catch block
								e.printStackTrace();	
							}
	    }

		 @Listen("onClick=#btnModificar")
			public void onClick$btnModificar(MouseEvent event){
				
				 
				 try {	
					 String Nombre  = nombre.getValue();
					 int posi= this.buscarSeccion(Nombre);
					 
				//	seccion.setCodSeccion(codigo.getValue());
					 seccion.setNombre(nombre.getValue());
					 seccion.setCapacidad(capacidad.getValue());
					 seccion.setPrecio(precio.getValue());
					 seccion.setCuposDisponibles(cuposdisponibles.getValue());
					
				
					 	
					 	dao.actualizarSeccion(posi, seccion);
					 	Messagebox.show("Se ha modificado la seccion exitosamente", "Information", Messagebox.OK, Messagebox.INFORMATION);
									
									
								} catch (Exception e) {
									// TODO Auto-generated catch block
									e.printStackTrace();	
								}
								LimpiarCampos();
					}
		 
		 
		 public int buscarSeccion (String Nombre)
			{	
			  try {
				 			  
				for (int i=0; i<dao.obtenerTodos().size(); i++){
					
			      
			        if (dao.obtenerTodos().get(i).getNombre().equals(nombre.getValue()))
				  {	  
			        	  return i;
			        	
				  }
			        System.out.println(i);
				}
			
			
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			  return -1; 
			}
		 
		 @Listen("onClick=#btnEliminar")
			public void onClick$btnEliminar(MouseEvent event){
				
				 
				 try {	
					 String Nombre = nombre.getValue();
					 int posi= this.buscarSeccion(Nombre);
					 
					// seccion.setCodSeccion(codigo.getValue());
					 seccion.setNombre(nombre.getValue());
					 seccion.setCapacidad(capacidad.getValue());
					 seccion.setPrecio(precio.getValue());
					 seccion.setCuposDisponibles(cuposdisponibles.getValue());
					 
					 
					 
					 
					 			 

					 	dao.actualizarSeccion(posi, seccion);
					 	Messagebox.show("Se ha eliminado la seccion exitosamente", "Information", Messagebox.OK, Messagebox.INFORMATION);
									
								} catch (Exception e) {
									// TODO Auto-generated catch block
									e.printStackTrace();	
								}
								LimpiarCampos();
					}
	
}
